<?php
/* 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
*/

/**
 * Description of File
 *
 * @author chaporgin_a
 */
class VA_Form_ViewHelper_XHTML_File extends VA_Form_ViewHelper {
    public function wrap() {
        $return = '';
        $this->getElement()->setHTMLTagAttribute('type', 'file', TRUE);
        $return .= sprintf('<input %s />', $this->getElement()->getAllAttributesAsHTML());
        if($this->getElement()->getValue()) {
            $name = $this->getElement()->getHTMLTagAttribute('name', TRUE).'[cancel_upload]';
            $fname = $this->getElement()->getValue()->getFilename();
            $return .= sprintf('<span class="filename">оставить %s</span>',$fname);
            $return .= sprintf('<a class="ajaxLink newUpload" title="%s" href="#">%s</a>'
                    , 'после загрузки текущий файл будет стерт'
                    , 'или загрузить другой файл');
            $return .= sprintf('<a class="ajaxLink cancelUpload" title="%s" href="#">%s %s</a>'
                    ,'текущий файл не будет загружен'
                    , 'вернуться к'
                    , $fname);
        }
        return sprintf('<span class="file">%s</span>', $return);
    }
    /**
     *
     * @param string $file
     * @return string
     */
    public function wrapOne(VA_Form_File_TemporaryFile $file = null) {
        $return = '';
        $attr = new VA_AttributeDictionary();
        $attr->Set('class', 'file');
        if(null !== $file) {
            $attr->Set('class', 'with-value');
            $cancelUpload = new VA_AttributeDictionary();
            $name = $this->getElement()->getHTMLTagAttribute('name', TRUE).'[cancel_upload][]';
            $cancelUpload->Set('name', $name);
            $cancelUpload->Set('type', 'hidden');
            $cancelUpload->Set('value', '');
            $id = str_replace(array('][','[',']'), array('_','_'), $name);
            $cancelUpload->Set('id', $id);
            $return .= sprintf('<input %s />', $cancelUpload);
            $fname = $file->getFilename();
            $return .= sprintf('<span class="filename">загружен <strong>%s</strong></span>',$fname);
            $return .= sprintf(', его можно <a class="ajaxLink removeUpload" title="%s %s" href="#" rel="%s">%s</a>', 'удалить', $fname, $file->getPublicId(), 'удалить');
            $return .= sprintf(' <a class="ajaxLink cancelUpload" title="%s" href="#">%s %s</a>','текущий файл не будет загружен', 'вернуться к', $fname);
        } else {
            $return .= sprintf('<input %s />'
                    , $this->transformInputName($this->getElement()->getAllAttributesAsHTML())
            );
            $removeField = new VA_AttributeDictionary();
            $removeField->Set('class', 'removeField');
            $removeField->Set('class', 'ajaxLink');
            $removeField->Set('href', '#');
            $return .= sprintf(' <a %s>%s</a>', $removeField, 'убрать поле');
            $attr->Set('class', 'no-value');
        }
        return sprintf('<li %s>%s</li>', $attr, $return);
    }

    protected function transformInputName($attributes) {
        $pattern = '/name=(")([\w\[\]]+)/';
        return preg_replace($pattern, 'name=$1$2[]', $attributes);
    }
}

